home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / ioport.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  6.5 KB  |  181 lines

  1. /*
  2.  * ioport.h    Definitions of routines for detecting, reserving and
  3.  *        allocating system resources.
  4.  *
  5.  * Authors:    Linus Torvalds
  6.  */
  7.  
  8. #ifndef _LINUX_IOPORT_H
  9. #define _LINUX_IOPORT_H
  10.  
  11. #ifndef __ASSEMBLY__
  12. #include <linux/compiler.h>
  13. #include <linux/types.h>
  14. /*
  15.  * Resources are tree-like, allowing
  16.  * nesting etc..
  17.  */
  18. struct resource {
  19.     resource_size_t start;
  20.     resource_size_t end;
  21.     const char *name;
  22.     unsigned long flags;
  23.     struct resource *parent, *sibling, *child;
  24. };
  25.  
  26. struct resource_list {
  27.     struct resource_list *next;
  28.     struct resource *res;
  29.     struct pci_dev *dev;
  30. };
  31.  
  32. /*
  33.  * IO resources have these defined flags.
  34.  */
  35. #define IORESOURCE_BITS        0x000000ff    /* Bus-specific bits */
  36.  
  37. #define IORESOURCE_TYPE_BITS    0x00000f00    /* Resource type */
  38. #define IORESOURCE_IO        0x00000100
  39. #define IORESOURCE_MEM        0x00000200
  40. #define IORESOURCE_IRQ        0x00000400
  41. #define IORESOURCE_DMA        0x00000800
  42.  
  43. #define IORESOURCE_PREFETCH    0x00001000    /* No side effects */
  44. #define IORESOURCE_READONLY    0x00002000
  45. #define IORESOURCE_CACHEABLE    0x00004000
  46. #define IORESOURCE_RANGELENGTH    0x00008000
  47. #define IORESOURCE_SHADOWABLE    0x00010000
  48.  
  49. #define IORESOURCE_SIZEALIGN    0x00020000    /* size indicates alignment */
  50. #define IORESOURCE_STARTALIGN    0x00040000    /* start field is alignment */
  51.  
  52. #define IORESOURCE_DISABLED    0x10000000
  53. #define IORESOURCE_UNSET    0x20000000
  54. #define IORESOURCE_AUTO        0x40000000
  55. #define IORESOURCE_BUSY        0x80000000    /* Driver has marked this resource busy */
  56.  
  57. /* PnP IRQ specific bits (IORESOURCE_BITS) */
  58. #define IORESOURCE_IRQ_HIGHEDGE        (1<<0)
  59. #define IORESOURCE_IRQ_LOWEDGE        (1<<1)
  60. #define IORESOURCE_IRQ_HIGHLEVEL    (1<<2)
  61. #define IORESOURCE_IRQ_LOWLEVEL        (1<<3)
  62. #define IORESOURCE_IRQ_SHAREABLE    (1<<4)
  63. #define IORESOURCE_IRQ_OPTIONAL     (1<<5)
  64.  
  65. /* PnP DMA specific bits (IORESOURCE_BITS) */
  66. #define IORESOURCE_DMA_TYPE_MASK    (3<<0)
  67. #define IORESOURCE_DMA_8BIT        (0<<0)
  68. #define IORESOURCE_DMA_8AND16BIT    (1<<0)
  69. #define IORESOURCE_DMA_16BIT        (2<<0)
  70.  
  71. #define IORESOURCE_DMA_MASTER        (1<<2)
  72. #define IORESOURCE_DMA_BYTE        (1<<3)
  73. #define IORESOURCE_DMA_WORD        (1<<4)
  74.  
  75. #define IORESOURCE_DMA_SPEED_MASK    (3<<6)
  76. #define IORESOURCE_DMA_COMPATIBLE    (0<<6)
  77. #define IORESOURCE_DMA_TYPEA        (1<<6)
  78. #define IORESOURCE_DMA_TYPEB        (2<<6)
  79. #define IORESOURCE_DMA_TYPEF        (3<<6)
  80.  
  81. /* PnP memory I/O specific bits (IORESOURCE_BITS) */
  82. #define IORESOURCE_MEM_WRITEABLE    (1<<0)    /* dup: IORESOURCE_READONLY */
  83. #define IORESOURCE_MEM_CACHEABLE    (1<<1)    /* dup: IORESOURCE_CACHEABLE */
  84. #define IORESOURCE_MEM_RANGELENGTH    (1<<2)    /* dup: IORESOURCE_RANGELENGTH */
  85. #define IORESOURCE_MEM_TYPE_MASK    (3<<3)
  86. #define IORESOURCE_MEM_8BIT        (0<<3)
  87. #define IORESOURCE_MEM_16BIT        (1<<3)
  88. #define IORESOURCE_MEM_8AND16BIT    (2<<3)
  89. #define IORESOURCE_MEM_32BIT        (3<<3)
  90. #define IORESOURCE_MEM_SHADOWABLE    (1<<5)    /* dup: IORESOURCE_SHADOWABLE */
  91. #define IORESOURCE_MEM_EXPANSIONROM    (1<<6)
  92.  
  93. /* PnP I/O specific bits (IORESOURCE_BITS) */
  94. #define IORESOURCE_IO_16BIT_ADDR    (1<<0)
  95. #define IORESOURCE_IO_FIXED        (1<<1)
  96.  
  97. /* PCI ROM control bits (IORESOURCE_BITS) */
  98. #define IORESOURCE_ROM_ENABLE        (1<<0)    /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */
  99. #define IORESOURCE_ROM_SHADOW        (1<<1)    /* ROM is copy at C000:0 */
  100. #define IORESOURCE_ROM_COPY        (1<<2)    /* ROM is alloc'd copy, resource field overlaid */
  101. #define IORESOURCE_ROM_BIOS_COPY    (1<<3)    /* ROM is BIOS copy, resource field overlaid */
  102.  
  103. /* PCI control bits.  Shares IORESOURCE_BITS with above PCI ROM.  */
  104. #define IORESOURCE_PCI_FIXED        (1<<4)    /* Do not move resource */
  105.  
  106. /* PC/ISA/whatever - the normal PC address spaces: IO and memory */
  107. extern struct resource ioport_resource;
  108. extern struct resource iomem_resource;
  109.  
  110. extern int request_resource(struct resource *root, struct resource *new);
  111. extern int release_resource(struct resource *new);
  112. extern void reserve_region_with_split(struct resource *root,
  113.                  resource_size_t start, resource_size_t end,
  114.                  const char *name);
  115. extern int insert_resource(struct resource *parent, struct resource *new);
  116. extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new);
  117. extern int allocate_resource(struct resource *root, struct resource *new,
  118.                  resource_size_t size, resource_size_t min,
  119.                  resource_size_t max, resource_size_t align,
  120.                  void (*alignf)(void *, struct resource *,
  121.                         resource_size_t, resource_size_t),
  122.                  void *alignf_data);
  123. int adjust_resource(struct resource *res, resource_size_t start,
  124.             resource_size_t size);
  125. resource_size_t resource_alignment(struct resource *res);
  126. static inline resource_size_t resource_size(struct resource *res)
  127. {
  128.     return res->end - res->start + 1;
  129. }
  130. static inline unsigned long resource_type(struct resource *res)
  131. {
  132.     return res->flags & IORESOURCE_TYPE_BITS;
  133. }
  134.  
  135. /* Convenience shorthand with allocation */
  136. #define request_region(start,n,name)    __request_region(&ioport_resource, (start), (n), (name))
  137. #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
  138. #define rename_region(region, newname) do { (region)->name = (newname); } while (0)
  139.  
  140. extern struct resource * __request_region(struct resource *,
  141.                     resource_size_t start,
  142.                     resource_size_t n, const char *name);
  143.  
  144. /* Compatibility cruft */
  145. #define release_region(start,n)    __release_region(&ioport_resource, (start), (n))
  146. #define check_mem_region(start,n)    __check_region(&iomem_resource, (start), (n))
  147. #define release_mem_region(start,n)    __release_region(&iomem_resource, (start), (n))
  148.  
  149. extern int __check_region(struct resource *, resource_size_t, resource_size_t);
  150. extern void __release_region(struct resource *, resource_size_t,
  151.                 resource_size_t);
  152.  
  153. static inline int __deprecated check_region(resource_size_t s,
  154.                         resource_size_t n)
  155. {
  156.     return __check_region(&ioport_resource, s, n);
  157. }
  158.  
  159. /* Wrappers for managed devices */
  160. struct device;
  161. #define devm_request_region(dev,start,n,name) \
  162.     __devm_request_region(dev, &ioport_resource, (start), (n), (name))
  163. #define devm_request_mem_region(dev,start,n,name) \
  164.     __devm_request_region(dev, &iomem_resource, (start), (n), (name))
  165.  
  166. extern struct resource * __devm_request_region(struct device *dev,
  167.                 struct resource *parent, resource_size_t start,
  168.                 resource_size_t n, const char *name);
  169.  
  170. #define devm_release_region(dev, start, n) \
  171.     __devm_release_region(dev, &ioport_resource, (start), (n))
  172. #define devm_release_mem_region(dev, start, n) \
  173.     __devm_release_region(dev, &iomem_resource, (start), (n))
  174.  
  175. extern void __devm_release_region(struct device *dev, struct resource *parent,
  176.                   resource_size_t start, resource_size_t n);
  177. extern int iomem_map_sanity_check(resource_size_t addr, unsigned long size);
  178.  
  179. #endif /* __ASSEMBLY__ */
  180. #endif    /* _LINUX_IOPORT_H */
  181.